home *** CD-ROM | disk | FTP | other *** search
- //-----------------------------------------------------------------------------
- // PE Explorer/Resource Tuner Demo Plug-In
- // (c)2001 by Yuri Rai & Mike Caetano/Heaventools ltd.
- // http://www.heaventools.com
- //
- // C++
- //-----------------------------------------------------------------------------
-
- #include <windows.h>
-
- #include "globals.h"
-
- // ---------------------------------------------------------------------------
- // ResTuner MEMORY ALLOCATOR FUNCTION POINTER TYPEDEF
- typedef void * __stdcall (*pfnMemoryAllocator)(DWORD);
-
- // ---------------------------------------------------------------------------
- // ResTuner CALLBACK FUNCTION FUNCTION POINTER TYPEDEF
- typedef void __stdcall (*pfnPGICallBack)(DWORD, DWORD, LPCTSTR);
-
- // ---------------------------------------------------------------------------
- // ResTuner PLUGIN INTERFACE STRUCTURE
- typedef struct tagPGIParamsBlock
- {
- pfnMemoryAllocator pMemAllocator; // function pointer to ResTuner supplied
- // memory allocation
- pfnPGICallBack pCallBack; // function pointer to ResTuner callback
- // function
- LPVOID pInBuff; // pointer to input buffer
- LPVOID pOutBuff; // pointer to output buffer filled by plugin
- DWORD dwInSize; // size in bytes of input buffer
- DWORD dwOutSize; // size in bytes of output buffer set by plugin
- DWORD dwInterface; // read only interface ID
- DWORD dwIndex; // read only plugin index
- }
- PGIParamsBlock, *PPGIParamsBlock;
-
- // ---------------------------------------------------------------------------
- // GLOBAL VARIABLES
-
- LPCTSTR szPluginName = SZPLUGINNAME;
-
- DWORD evID_PostLogInfo = 0;
-
- // ---------------------------------------------------------------------------
- // EXPORT FUNCTION PROTOTYPES
- void __stdcall PexRegisterPlugIn(LPCTSTR *);
- void __stdcall PexAboutPlugIn(void);
- BOOL __stdcall PexPreloadImage(PPGIParamsBlock);
-
- // ---------------------------------------------------------------------------
- // EXPORT FUNCTION IMPLEMENTATIONS
-
- // ---------------------------------------------------------------------------
- // ResTuner R E G I S T E R P L U G I N
-
- void __stdcall __declspec(dllexport) PexRegisterPlugIn(LPCTSTR *ppPluginName)
- {
- *ppPluginName = szPluginName;
- }
-
-
- // ---------------------------------------------------------------------------
- // ResTuner A B O U T P L U G I N
-
- void __stdcall __declspec(dllexport) PexAboutPlugIn(void)
- {
- TCHAR szBuffer[MAX_PATH];
- ZeroMemory(szBuffer,MAX_PATH);
- wsprintf(szBuffer, TEXT("%s\r\n%s"), szPluginName, SZVERSION);
- MessageBox(NULL, szBuffer, TEXT("About"), MB_OK|MB_ICONINFORMATION);
- }
-
-
- // ---------------------------------------------------------------------------
- // ResTuner(P E X) P R E L O A D I M A G E
-
- BOOL __stdcall __declspec(dllexport) PexPreloadImage(PPGIParamsBlock pPGIPB)
- {
-
- // assume the worst :-)
- BOOL result = FALSE;
-
- // setup messages for ResTuner log window
- LPCTSTR DemoMessage1 = "Emulating Execution...";
- LPCTSTR DemoMessage2 = "Allocating memory ...";
- LPCTSTR DemoMessage3 = "Copy InBuff to OutBuff...";
- LPCTSTR DemoMessage4 = "Runtime error: PexPreloadImage";
-
- // assign function pointers to local variables
- pfnMemoryAllocator MA = pPGIPB->pMemAllocator;
- pfnPGICallBack CB = pPGIPB->pCallBack;
-
- __try
- {
-
- // announce plugin invocation
- if ( CB != NULL ) {
- CB(pPGIPB->dwInterface, evID_PostLogInfo, DemoMessage1);
- }
-
- // announce action preparation
- if ( CB != NULL ) {
- CB(pPGIPB->dwInterface, evID_PostLogInfo, DemoMessage2);
- }
-
- // set output buffer size parameter
- pPGIPB->dwOutSize = pPGIPB->dwInSize;
-
- // let ResTuner allocate shared memory for output buffer
- pPGIPB->pOutBuff = MA(pPGIPB->dwInSize);
-
- // transfer contents to output buffer
- CopyMemory(pPGIPB->pOutBuff, pPGIPB->pInBuff, pPGIPB->dwInSize);
-
- // announce action success
- if ( CB != NULL ) {
- CB(pPGIPB->dwInterface, evID_PostLogInfo, DemoMessage3);
- }
-
- // all systems go!
- result = TRUE;
-
- }
- __except ( EXCEPTION_EXECUTE_HANDLER )
- {
-
- // announce error
- if ( CB != NULL ) {
- CB(pPGIPB->dwInterface, evID_PostLogInfo, DemoMessage4);
- }
-
- }
-
- // return status
- return(result);
-
- }
-
- // ---------------------------------------------------------------------------
-